package com.cskaoyan.javase.oop2._1extends._1relation;

/**
 * 继承中的父子类之间,是什么关系呢?
 * 从"从属关系"上来说,父子类之间的关系,是"is-a"关系
 * 准确来说,子类"is-a"父类,子类可以看成一个父类,可以近似的当成父类去使用
 *
 * 如何具体的去理解"is-a"呢?
 * 1.直接从代码角度去理解
 *      可以用"父类引用指向子类对象"的方式创建子类对象
 *      这种语法可以直接写在代码中,不会有任何问题
 *      这说明,子类对象可以当成父类对象去使用,才会出现这种写法
 *      所以子类"is-a"父类
 *
 * 2.从数据类型的定义的角度解释:
 *      数据类型的定义: 数据 + 操作
 *      定义了一个类,就是定义了一种全新的自定义数据类型
 *      在类中:
 *          定义成员变量 = 数据
 *          定义成员方法 = 数据
 *      现在子类通过继承父类,得到了父类的所有成员
 *      那么从数据类型的定义上来说,
 *      子类就覆盖了父类
 *      所以子类"is-a"父类
 *
 * 3.从最直观的逻辑上看:
 *      Student是Person
 *      Teacher是Person
 *      Cat是Animal
 *      Dog是Animal
 *      ....
 *
 * 总之,子类和父类之间的关系,称之为"is-a"关系,子类"is-a"父类
 * 反过来,父类和子类没有任何关系
 *
 * 子类"is-a"父类,在语法上,最好的体现的就是
 * 可以写 "父类引用指向子类对象"
 *
 *
 * @since 17:28
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // 在以下Father和Son的案例中,创建Son对象的方式有几种呢? 2种
        Son s = new Son();
        // 父类引用指向子类对象
        Father fs = new Son();

        // 子类引用指向父类对象,这是不可能的,因为它们没有is-a关系.
        // Son ss = new Father();
    }
}

// 父类
class Father {
}

// 子类
class Son extends Father {
}